#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
Python 3.x
SQLAlchemy 1.4.41

操作数据
"""
from models.user import User, Base, engine
from sqlalchemy.orm import sessionmaker

# 映射到数据库
Base.metadata.create_all()

# 添加数据到表
yi_ye_user = User(name='YiYe', fullname='YiYeBiJi', password='123456')
# 打印名字
print(yi_ye_user.name)
# > YiYe
# 打印密码
print(yi_ye_user.password)
# > 123456
# 打印id
print(yi_ye_user.id)
# > None

Session = sessionmaker(bind=engine)
# 或者
# Session = sessionmaker()
# Session.configure(bind=engine)
session = Session()
yi_ye_user = User(name='YiYe', fullname='YiYeBiJi', password='123456')
session.add(yi_ye_user)
session.commit()
# 打印yi_ye_user的id
print(yi_ye_user.id)
# > 1

# 数据回滚
# 修改yi_ye_user的用户名
yi_ye_user.name = 'YiYe007'
# 创建一个新的用户
yi_ye_user_obj = User(name='YiYe008', fullname='YiYeBiJi008', password='123456')
# 将新创建的YiYe008添加到session中
session.add(yi_ye_user_obj)
# 判断YiYe008是否在session中存在
print(yi_ye_user_obj in session)
# > True
# 从数据库中查找name=YiYe007的用户
tmp_user = session.query(User).filter_by(name='YiYe007').all()
# 打印tmp_user对象
print(tmp_user)
# 打印出查找到的tmp_user对象，注意这个对象的name属性已经在事务中被修改为YiYe007了。
# > <User(name='YiYe007', fullname='YiYeBiJi', password='123456')>
# 刚刚所有的操作都是在事务中进行的，现在来做回滚操作
session.rollback()
# 再打印tmp_user
print(tmp_user)
# > <User(name='YiYe', fullname='YiYeBiJi', password='123456')>
# 再看YiYe008是否还在session中
print(yi_ye_user_obj in session)
# > False

# 查找数据
for instance in session.query(User).order_by(User.id):
    print(instance)
# 输出所有的user实例
# > <User(id='1',name='YiYe',fullname='YiYeBiJi',password='123456')>

for instance in session.query(User.name):
    print(instance)
# 输出所有的查找结果
# > ('YiYe',)

for instance in session.query(User.name, User.fullname):
    print(instance)
# 输出所有的查找结果
# > ('YiYe', 'YiYeBiJi')

for instance in session.query(User, User.name).all():
    print(instance)
# 输出所有的查找结果
# > (<User(id='1',name='YiYe',fullname='YiYeBiJi',password='123456')>, 'YiYe')

for instance in session.query(User).order_by(User.id)[1:3]:
    print(instance)
# 输出所有的查找结果
# > <User(id='2',name='YiYe',fullname='YiYeBiJi',password='123456')>

# 第一种：使用filter_by过滤：
for name in session.query(User.name).filter_by(fullname='YiYeBiJi'):
    print(name)
# 输出结果：
# > ('YiYe',)

# 第二种：使用filter过滤：
for name in session.query(User.name).filter(User.fullname == 'YiYeBiJi'):
    print(name)
# 输出结果：
# > ('YiYe',)
